import express from "express";
import {SSEServerTransport} from "@modelcontextprotocol/sdk/server/sse.js";
import {McpServer} from "@modelcontextprotocol/sdk/server/mcp.js";
import {z} from "zod";

const app = express();

const server = new McpServer({
    name: "example-server",
    version: "1.0.0"
});

// 注册一个提供加密功能的工具
server.tool(
    // 工具名称
    "pdx-encryption-tool",
    // 工具描述
    "这是自定义加密算法“派大星算法”的加密函数",
    // 工具参数
    {
        // 待加密的文本参数
        textContent: z.string().max(200).describe("待加密的文本（不超过200字）")
    },
    // 工具的异步处理函数
    async ({textContent}) => {
        // 这里只做演示，简单将文本字符倒序，作为加密规则
        const resultContent = textContent.split('').reverse().join('')

        return {
            content: [
                {
                    type: "text",
                    text: resultContent,
                },
            ]
        }
    }
)

// 注册一个提供解密功能的工具
server.tool(
    // 工具名称
    "pdx-decryption-tool",
    // 工具描述
    "这是自定义加密算法“派大星算法”的解密函数",
    // 工具参数
    {
        // 待解密的文本参数
        textContent: z.string().max(200).describe("待解密的文本（不超过200字）")
    },
    // 工具的异步处理函数
    async ({textContent}) => {
        // 这里只做演示，简单将文本字符倒序，作为解密规则
        const resultContent = textContent.split('').reverse().join('')

        return {
            content: [
                {
                    type: "text",
                    text: resultContent,
                },
            ]
        }
    }
)

let transport: SSEServerTransport | null = null;

app.get("/sse", (req, res) => {
    transport = new SSEServerTransport("/messages", res);
    server.connect(transport);
});

app.post("/messages", (req, res) => {
    if (transport) {
        transport.handlePostMessage(req, res);
    }
});

app.listen(3000);